iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Software Development

從無到有,LINE著不走系列 第 27

Day 27: 實現資料存儲功能

  • 分享至 

  • xImage
  •  

在第 27 天,我們將專注於為 Line Bot 增加資料存儲的功能,通過將用戶交互資料保存到資料庫,為未來的資料分析和個性化互動做準備。

步驟 1:選擇資料庫

  1. 選擇資料庫類型

    • 關係型資料庫(如 MySQL 或 SQLite):適合需要結構化的用戶資料存儲,例如用戶 ID、消息內容等。
    • NoSQL 資料庫(如 MongoDB):適合靈活的資料存儲,例如聊天記錄、偏好資料等。
  2. 本次使用 SQLite(適合測試和開發環境):

    • SQLite 是輕量級的本地資料庫,易於配置,適合開發階段使用。

步驟 2:設置資料庫並創建表

  1. 安裝 SQLite 驅動

    • 如果沒有安裝,可以通過以下方式進行安裝:
    pip install sqlite3
    
  2. 創建資料庫和表

    • 創建一個名為 line_bot.db 的資料庫,並建立一個 user_messages 表來存儲用戶的聊天資料。
    import sqlite3
    
    # 連接到資料庫(如果不存在則會創建)
    conn = sqlite3.connect('line_bot.db')
    cursor = conn.cursor()
    
    # 創建 user_messages 表
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS user_messages (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            user_id TEXT NOT NULL,
            message TEXT NOT NULL,
            timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
        )
    ''')
    
    conn.commit()
    conn.close()
    

步驟 3:實現資料的存儲

  1. 在接收用戶消息時保存到資料庫

    • 修改消息處理邏輯,使每次用戶發送消息時,將其存入資料庫。
    from linebot import LineBotApi, WebhookHandler
    from linebot.models import MessageEvent, TextMessage
    import sqlite3
    
    line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
    handler = WebhookHandler('YOUR_CHANNEL_SECRET')
    
    @handler.add(MessageEvent, message=TextMessage)
    def handle_message(event):
        user_id = event.source.user_id
        user_message = event.message.text
    
        # 將用戶消息存入資料庫
        conn = sqlite3.connect('line_bot.db')
        cursor = conn.cursor()
    
        cursor.execute('''
            INSERT INTO user_messages (user_id, message)
            VALUES (?, ?)
        ''', (user_id, user_message))
    
        conn.commit()
        conn.close()
    
        # 回覆用戶
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text="您的消息已收到!")
        )
    

步驟 4:驗證資料存儲

  1. 查看存儲的資料

    • 在終端中使用 SQLite 工具來驗證資料是否正確保存。
    sqlite3 line_bot.db
    
    • 查詢 user_messages 表中的資料:
    SELECT * FROM user_messages;
    

步驟 5:處理錯誤和優化

  1. 錯誤處理

    • 添加資料庫操作的錯誤處理機制,確保在資料庫連接失敗時能正確應對。
    try:
        conn = sqlite3.connect('line_bot.db')
        cursor = conn.cursor()
    
        cursor.execute('''
            INSERT INTO user_messages (user_id, message)
            VALUES (?, ?)
        ''', (user_id, user_message))
    
        conn.commit()
    except sqlite3.Error as e:
        print(f"An error occurred: {e}")
    finally:
        conn.close()
    
  2. 優化資料庫連接

    • 在多次請求中反覆連接和關閉資料庫會影響性能,可以考慮使用連接池來優化資料庫的訪問效率。

上一篇
Day 26: 提升 Line Bot 的性能
下一篇
Day 28: 實現資料分析功能
系列文
從無到有,LINE著不走30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言